 
chrome.browserAction.onClicked.addListener(function (tab) {
  
  chrome.tabs.query({
    active: true,
    currentWindow: true
  }, function (tabs) {
    var currentTab = tabs[0];
    var currentUrl = currentTab.url;
    // 点了插件图标后，处理
    console.error('插件信息 点了插件图标在这个网站上:'+ currentUrl);
    chrome.tabs.executeScript(tab.id, { file: "content.js",runAt: "document_end"  });
  });
});
// 通用写法：url适配时亮显page_action
chrome.runtime.onInstalled.addListener(function () {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function () {
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: [
          // 监听域名匹配
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: { urlContains: 'shopcider' },
          })
        ],
        actions: [new chrome.declarativeContent.ShowPageAction()]
      }
    ]);
  });
});
 
// 接收到拦截的响应，将器发送到requestUrl变量配置的地址上
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
 
  // 异步响应sendMessage的写法：
  // 异步接收要求返回turn，从而使sendMessage可以异步接收回应消息
   return true;
});   
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  const getFileExtension = (url) => {
    const extension = url.split('.').pop().toLowerCase();
    return ['jpg', 'jpeg', 'png', 'gif'].includes(extension) ? extension : 'jpg';
  };
  if (message.action === "downloadImages") {
    // 收到content-script发来的消息，开始下载图片
    message.urls.forEach((url,index) => {
      const fileExtension = getFileExtension(url);
      
      // 根据 index 创建文件名，从 1 开始
      // 这里如果上次下载到了3，这次又下载到3，会覆盖上次的文件,如果保存上次下载的index，每次下载时加1，就不会覆盖了
      chrome.storage.local.get(['lastIndex'], function(result) {
        const lastIndex = result.lastIndex || 0;
        const newIndex = lastIndex + index + 1;
        const fileName = `${newIndex}.${fileExtension}`;
        chrome.storage.local.set({ lastIndex: newIndex });
        // 这里我们拿到了图片的链接和fileName
        compressAndDownloadImage(url, fileName);

        // chrome.downloads.download({
        //   url: url,  // 下载的图片链接
        //   filename: fileName,  // 使用自定义的文件名
        //   saveAs: false // 如果需要弹出保存对话框，设置为 true
        // });
      });
    });
  }
});
// 将图片 URL 转换为 File 对象
function dataURLtoFile(url, fileName) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'blob';  // 获取 Blob 类型的响应
    xhr.onload = function() {
      const blob = xhr.response;
      const file = new File([blob], fileName, { type: blob.type });
      resolve(file);  // 返回 File 对象
    };
    xhr.onerror = function() {
      reject('Failed to convert URL to file.');
    };
    xhr.send();
  });
}

// 图片压缩并下载函数
async function compressAndDownloadImage(url, fileName) {
  try {
    // 等待将 URL 转换为 File 对象
    const file = await dataURLtoFile(url, fileName);
    // 直接调用压缩函数
    compressAndDownloadImageFromFile(file, fileName);
  } catch (error) {
    console.error('插件信息 转换 URL 为文件失败:'+ JSON.stringify(error));
  }
}
// 使用 Compressor.js 压缩并下载文件
function compressAndDownloadImageFromFile(file, fileName) {
  let quality = 0.99;  // 从 0.99 开始
  const BYTE_CONVERSION = 1000.0;

  // 递归压缩方法
  function compressImageWithQuality(file, quality) {
    new Compressor(file, {
      quality: quality,  // 当前质量
      success(result) {
        // 如果压缩后的文件大于 3MB ，则继续压缩
        if (result.size > 3 * BYTE_CONVERSION * BYTE_CONVERSION) {
          let destQ = quality - 0.01;
          compressImageWithQuality(result, destQ); // 每次降低 0.01
        } else {
          // 文件满足要求或质量已经足够低，进行下载
          console.log('插件信息 最终压缩到 : 约'+ result.size/BYTE_CONVERSION/BYTE_CONVERSION + 'MB')

          downloadCompressedImage(result, fileName);
        }
      },
      error(err) {
        console.error('插件错误 压缩失败 :'+ JSON.stringify(err))
      }
    });
  }

  // 开始压缩
  compressImageWithQuality(file, quality);
}
// 下载压缩后的图片
function downloadCompressedImage(file, fileName) {
  const blobUrl = URL.createObjectURL(file);
  chrome.downloads.download({
    url: blobUrl,
    filename: fileName,  // 使用自定义的文件名
    saveAs: false // 如果需要弹出保存对话框，设置为 true
  });
}